From 78ea5d7ed2253268fc6b540c7f402a4ec844b9f1 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 7 Sep 2005 17:02:47 +0000 Subject: [PATCH] Make C-u commit and restart hex input if we are already in a hex sequence. 2005-09-07 Matthias Clasen * gtk/gtkimcontextsimple.c (gtk_im_context_simple_filter_keypress): Make C-u commit and restart hex input if we are already in a hex sequence. --- ChangeLog | 6 ++++++ ChangeLog.pre-2-10 | 6 ++++++ gtk/gtkimcontextsimple.c | 25 +++++++++++++++++++++++-- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index edafbca20d..5f5d55d348 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-09-07 Matthias Clasen + + * gtk/gtkimcontextsimple.c (gtk_im_context_simple_filter_keypress): + Make C-u commit and restart hex input if we are already in a + hex sequence. + 2005-09-06 Matthias Clasen * gdk/x11/gdkkeys-x11.c (update_modmap): Make the modmap reflexive. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index edafbca20d..5f5d55d348 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +2005-09-07 Matthias Clasen + + * gtk/gtkimcontextsimple.c (gtk_im_context_simple_filter_keypress): + Make C-u commit and restart hex input if we are already in a + hex sequence. + 2005-09-06 Matthias Clasen * gdk/x11/gdkkeys-x11.c (update_modmap): Make the modmap reflexive. diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c index 8c6719e224..ac98ac0656 100644 --- a/gtk/gtkimcontextsimple.c +++ b/gtk/gtkimcontextsimple.c @@ -1381,7 +1381,8 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, if (!have_hex_mods || (n_compose > 0 && !context_simple->in_hex_sequence) || (n_compose == 0 && !context_simple->in_hex_sequence && !is_hex_start) || - (context_simple->in_hex_sequence && !hex_keyval && !is_space && !is_backspace)) + (context_simple->in_hex_sequence && !hex_keyval && + !is_hex_start && !is_space && !is_backspace)) { if (event->state & (gtk_accelerator_get_default_mod_mask () & ~GDK_SHIFT_MASK)) return FALSE; @@ -1406,8 +1407,28 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, return TRUE; } + if (context_simple->in_hex_sequence && have_hex_mods && is_hex_start) + { + if (context_simple->tentative_match && + g_unichar_validate (context_simple->tentative_match)) + { + gtk_im_context_simple_commit_char (context, context_simple->tentative_match); + context_simple->compose_buffer[0] = 0; + } + else + { + /* invalid hex sequence */ + if (n_compose > 0) + gdk_display_beep (gdk_drawable_get_display (event->window)); + + context_simple->tentative_match = 0; + context_simple->in_hex_sequence = FALSE; + context_simple->compose_buffer[0] = 0; + } + } + /* Check for hex sequence start */ - if (n_compose == 0 && !context_simple->in_hex_sequence && have_hex_mods && is_hex_start) + if (!context_simple->in_hex_sequence && have_hex_mods && is_hex_start) { context_simple->compose_buffer[0] = 0; context_simple->in_hex_sequence = TRUE; -- 2.30.2